package com.example.lists;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class listToMap3 {
    public static void main(String[] args) {
        List<User> list = new ArrayList<User>();
        list.add(new User(1, 1, "11"));
        list.add(new User(2, 2, "11"));
        list.add(new User(3, 3, "33"));
        list.add(new User(5, 5, "55"));

        list.add(new User(6, 6, null));

        //1.key和value都是对象中的某个属性值。
        //Map<String, String> userMap1 = list.stream().collect(Collectors.toMap(User::getLable, User::getLable));

        //2.key是对象中的某个属性值，value是对象本身（使用返回本身的lambda表达式）。
        //Map<String, User> userMap2 = list.stream().collect(Collectors.toMap(User::getLable, User -> User));

        //3.key是对象中的某个属性值，value是对象本身（使用Function.identity()的简洁写法）。
        //Map<String, User> userMap3 = list.stream().collect(Collectors.toMap(User::getLable, Function.identity()));

        //4.key是对象中的某个属性值，value是对象本身，当key冲突时选择第二个key值覆盖第一个key值。
        Map<String, User> userMap4 = list.stream().collect(Collectors.toMap(User::getLable, Function.identity(), (oldValue, newValue) -> newValue));
        System.out.println(userMap4);

        Map<String, String> userMap5 = list.stream().collect(Collectors.toMap(k -> k.getLable(), a -> a.getLable(), (kye1, key2) -> key2));
        System.out.println(userMap5);
    }
}
